﻿//22. 括号生成
//数字 n 代表生成括号的对数，请你设计一个函数
//用于能够生成所有可能的并且 有效的 括号组合。

class Solution {
public:
    string s;
    void dfs(vector<string>& ans, int left, int right, int n)
    {
        if (s.size() == 2 * n)
        {
            ans.push_back(s);
            return;
        }
        //加入（
        if (left < n)
        {
            s.push_back('(');
            dfs(ans, left + 1, right, n);
            s.pop_back();
        }
        //加入 ）
        if (right < left)
        {
            s.push_back(')');
            dfs(ans, left, right + 1, n);
            s.pop_back();
        }

    }
    vector<string> generateParenthesis(int n)
    {
        vector<string> ans;
        dfs(ans, 0, 0, n);
        return ans;
    }
};